﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data.Sql;

namespace DAO
{
    public static class clsDAO_DataProviders
    {
        private static string m_strQueryString = @"Data Source=(local);Database=QuanLyThiTracNghiem;Trusted_Connection=True;";
        private static SqlConnection m_sqlConnecttion;

        /// <summary>
        /// Phương thức này dùng để lấy dữ liệu.
        /// Với tham số truyền vào là một chuỗi Command
        /// Kết quả trả về là một DataTable
        /// </summary>
        /// <param name="Command"></param>
        /// <param name="lstThamSo"></param>
        /// <returns></returns>
        public static DataTable LayDuLieu(string Command, params SqlParameter[] lstThamSo)
        {
            DataTable dt = new DataTable();
            try
            {
                MoKetNoi();
                SqlCommand cmd = new SqlCommand(Command, m_sqlConnecttion);
                cmd.Parameters.AddRange(lstThamSo);
                dt.Load(cmd.ExecuteReader());
                DongKetNoi();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return dt;
        }

        /// <summary>
        /// Phương thức này dùng để cập nhật dữ liệu dùng chung cho tất cả các Class.
        /// Với tham số truyền vào một chuỗi Command
        /// Và tham số thứ hai là một SqlParameter với số lượng tùy ý.
        /// Có thể có nhiều Parameter nhưng cũng có thể không có Parameter nào cũng được.
        /// </summary>
        /// <param name="Command"></param>
        /// <param name="lstThamSo"></param>
        /// <returns></returns>
        public static bool CapNhatDuLieu(string Command, params SqlParameter[] lstThamSo)
        {
            MoKetNoi();
            SqlCommand cmd = new SqlCommand(Command, m_sqlConnecttion);
            cmd.Parameters.AddRange(lstThamSo);
            int kq = cmd.ExecuteNonQuery();
            DongKetNoi();
            if (kq != 0)
                return true;
            else
                return false;
        }

        /// <summary>
        /// Phương thức này đùng để mở kết nối đến CSDL
        /// </summary>
        private static void MoKetNoi()
        {
            if (m_sqlConnecttion == null || m_sqlConnecttion.State == ConnectionState.Closed)
            {
                m_sqlConnecttion = new SqlConnection(m_strQueryString);
                m_sqlConnecttion.Open();
            }
        }
        /// <summary>
        /// Phương thức này đùng để đóng kết nối đến CSDL
        /// </summary>
        private static void DongKetNoi()
        {
            if (m_sqlConnecttion.State == ConnectionState.Closed)
            {
                m_sqlConnecttion.Close();
            }
        }
    }
}
